/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Persistencia.daos;

import Persistencia.CRUD;
import Persistencia.DAO;
import Persistencia.SeqHelper;
import Persistencia.modelos.Campeonato;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author HP
 */
public class CampeonatoDAO implements DAO<Integer, Campeonato>{

    public void salva(Campeonato obj) {        
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        int i = SeqHelper.getId("campeonato");        
        CRUD.adiciona("Campeonato", "idCampeonato, QtdePartidas, nomeCampeonato,dataInicio, dataFim", i + ", " + 
                obj.getQtdePartidas() + ", '" + obj.getNomeCampeonato() + "', '" + sdf.format(obj.getDataInicio()) + "', '" + sdf.format(obj.getDataFim()) + "'");
        obj.setIdCampeonato(i);        
    }

    public void atualiza(Campeonato obj) {
        List<String> campos = new ArrayList<String>();        
        campos.add("QtdePartidas");
        campos.add("nomeCampeonato");
        campos.add("dataInicio");
        campos.add("dataFim");
        
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
        List<String> valores = new ArrayList<String>();        
        valores.add(String.valueOf(obj.getQtdePartidas()));
        valores.add("'"+obj.getNomeCampeonato()+"'");
        valores.add("'"+sdf.format(obj.getDataInicio())+"'");
        valores.add("'"+sdf.format(obj.getDataFim())+"'");
        
        CRUD.atualiza("campeonato",  campos, valores, "where idcampeonato = " + obj.getIdCampeonato());
    }

    public void deleta(Integer obj) {
        List<Integer> ints = new ArrayList<Integer>();
        ints.add(obj);
        CRUD.deleta("campeonato", "idcampeonato", ints);
    }

    public Campeonato recupera(Integer obj) {
        try{
            ResultSet rs = CRUD.consulta("select * from campeonato where idcampeonato = " + obj);
            Campeonato c = null;
            while (rs.next()){
                c = new Campeonato();
                c.setIdCampeonato(rs.getInt("idcampeonato"));
                c.setNomeCampeonato(rs.getString("nomeCampeonato"));
                c.setQtdePartidas(rs.getInt("qtdePartidas"));
                c.setDataInicio(rs.getDate("datainicio"));
                c.setDataFim(rs.getDate("dataFim"));                
            }
            return c;            
        } catch (SQLException e){
            throw new RuntimeException(e);
        }
    }

    public Collection<Campeonato> recuperaLista(Collection<Integer> chaves) {
        StringBuilder sb = new StringBuilder();
        Iterator<Integer> it = chaves.iterator();
        while (it.hasNext()){
            sb.append(it.next()).append(",");
        }
        String ids = sb.toString().substring(0, sb.toString().length()-1);
        
        try{
            ResultSet rs = CRUD.consulta("select * from campeonato where idcampeonato in (" + ids + ")");
            Collection<Campeonato> campeonatos = new ArrayList<Campeonato>();
            Campeonato c = null;
            while (rs.next()){
                c = new Campeonato();
                c.setIdCampeonato(rs.getInt("idcampeonato"));
                c.setNomeCampeonato(rs.getString("nomeCampeonato"));
                c.setQtdePartidas(rs.getInt("qtdePartidas"));
                c.setDataInicio(rs.getDate("datainicio"));
                c.setDataFim(rs.getDate("dataFim"));                
                campeonatos.add(c);
            }
            return campeonatos;
        } catch (SQLException e){
            throw new RuntimeException(e);
        }
            
    }

    public Collection<Campeonato> recuperaTodos() {    
        try{
            ResultSet rs = CRUD.consulta("select * from campeonato");
            Collection<Campeonato> campeonatos = new ArrayList<Campeonato>();
            Campeonato c = null;
            while (rs.next()){
                c = new Campeonato();
                c.setIdCampeonato(rs.getInt("idcampeonato"));
                c.setNomeCampeonato(rs.getString("nomeCampeonato"));
                c.setQtdePartidas(rs.getInt("qtdePartidas"));
                c.setDataInicio(rs.getDate("datainicio"));
                c.setDataFim(rs.getDate("dataFim"));                
                campeonatos.add(c);
            }
            return campeonatos;
        } catch (SQLException e){
            throw new RuntimeException(e);
        }        
    }
    
    
}
